#!/usr/bin/env node

/**
 * 作为脚手架的入口文件
 * 若操作系统是 linux or macOS，还需修改文件的读写权限为755
 * chmod -R 755 文件名
 */

// console.log('hello')

const fs = require('fs')
const path = require('path')
// 可发起命令行交互询问
const inquirer = require('inquirer')
// ejs 模板
const ejs = require('ejs')

inquirer.prompt([
  {
    type: 'input', // 交互方式
    name: 'name', // 问题返回的键
    message: 'Project name?'
  },
  {
    type: 'input',
    name: 'destDir',
    message: 'destDir name?'
  }
]).then(answer => {
  console.log(answer)

  // 模板目录
  const tempDir = path.join(__dirname, 'templates')
  // 目标目录(命令行在哪个目录执行，则是哪个目录)
  // const destDir = process.cwd()
  const { destDir } = answer

  // 判断目录or文件是否存在
  fs.access(destDir, err => {
    if (!err) {
      // console.log('已存在')
    } else {
      // console.log('不存在')
      // 否则创建
      fs.mkdir(destDir, e => {
        if (e) throw e
        console.log(`创建目录${destDir}成功`)
      })
    }
  })

  // 读取模板中有哪些文件，自动扫描 templates 下的所有文件
  fs.readdir(tempDir, (err, files) => {
    if (err) throw err
    files.forEach(file => {
      console.log(file, 'file')
      /**
       * 通过模板引擎渲染对应路径文件
       * @param {string} 文件绝对路径
       * @param {string} 模板引擎工作时的数据上下文
       * @param {fn} 成功后的回调函数 
       */
      ejs.renderFile(path.join(tempDir, file), answer, (error, res) => {
        if (error) throw error
        
        // 将结果写入目标目录
        fs.writeFileSync(path.join(destDir, file), res)
      })
    })
  })
})